import PD from '.';
/**
 * 所有缓存的设置在此约束，且必须附上业务说明
 * 如 : count : number  记录用户点击xx按钮的次数
 */
//功能：缓存数据，当前与上一次时间对比超过1天则重新请求
type DayItem = {
	day ?: string,//缓存的当前时间
	// eslint-disable-next-line @typescript-eslint/no-explicit-any
	list ?: any,//缓存的数据
	driver_id ?: number//司机id
}

//缓存本地所有司机第一次进入im聊天的时间
//司机id number;订单号string 时间number
type DriverListItemType = {
	[propsNmae : number] : {
		[propsNmae : string] : number
	}
}

type StorageTypes = {
	tabBarScheduleTipClosed : number,//底部菜单栏，创建行程提示是否关闭 存在该字段，即表示用户关闭了提示
	transferOrderRemark : DayItem,//转卖订单 - 行程备注列表
	sale_order_amount : number | string,//转卖订单 - 转让费 - 输入框失去焦点即记录本地，创建转单成功后删除该缓存
	passenger_mobile : string,//转卖订单 - 乘客手机 - 输入即记录，同上
	pay_amount : number | string,//转卖订单 - 乘客支付金额 - 同上
	nextPlaceSwitch : boolean,//一键开单 - 短信开关 - 记录上次操作开关,确认下单后才会记录
	resetDayOpen : DayItem,
	current_schedule_id : number,//当前正在履约的行程的id
	sellGuidanceTime : DayItem,//转单引导页
	quickTextList : DayItem,//im快速回复内容
	imDriverFirstTime : DriverListItemType,//im聊天列表司机首次进入的时间，也可是‘温馨提示’显示的时间
};

type StorageKey = keyof StorageTypes;
type StorageValue<T extends keyof StorageTypes> = StorageTypes[T];

export namespace Storage {
	export function set <T extends StorageKey>(key : T, value : StorageValue<T>) {
		//存入前校验存储是否超限
		const {currentSize, limitSize, keys} = uni.getStorageInfoSync();
		if (currentSize >= limitSize - 2 * 1024) {
			keys.forEach(key => {
				PD.UniHelp.removeStorage(key);
			});
		};
		PD.UniHelp.setStorage(key, value);
	}
	
	export function get<T extends StorageKey>(key : T) {
		return PD.UniHelp.getStorage<StorageValue<T>>(key);
	}

	export function remove<T extends StorageKey>(key : T) {
		PD.UniHelp.removeStorage(key);
	}
}